import theAxios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'
import { getTime } from '@/utils/auth'
const expirationTime = 3600 // token 过期时间

const axios = theAxios.create({
  // 配置基地址 会根据当前环境(开发、上线)触发相应按文件内的变量
  baseURL: process.env.VUE_APP_BASE_API,
  // baseURL: 'http://ihrm.itheima.net/api',
  timeout: 50000
})

// 请求拦截器
axios.interceptors.request.use(
  (config) => {
    // 判断本地是否有token
    if (store.getters.token) {
      // 判断token是否过期  毫秒值要乘1000
      if (Date.now() - getTime() > expirationTime * 1000) {
        // 删除用户token和个人信息
        store.dispatch('user/logout')
        // 跳转登录页
        router.push('/login')
        return Promise.reject(new Error('登录过期'))
      } else {
        config.headers.Authorization = `Bearer ${store.getters.token}`
      }
    }
    return config
  },
  (error) => {
    Message.error(error.message)
    return Promise.reject(error)
  }
)

// 响应拦截器
axios.interceptors.response.use(
  (response) => {
    // axios会在外层多套一层data
    const { success, message, data } = response.data
    if (success) {
      // 请求成功则将token返回
      return data
    } else {
      // 提示错误信息
      Message.error(message)
      // 返回错误状态
      return Promise.reject(new Error(message))
    }
  },
  (error) => {
    Message.error(error.message)
    return Promise.reject(error)
  }
)

export default ({
  url,
  method = 'GET',
  params = {},
  data = {},
  headers = {}
}) =>
  axios({
    url,
    method,
    params,
    data,
    headers
  })
